#include <iostream>
#include <unordered_map>
#include <memory>
#include "Pthread.hpp"

// class ThreadData
// {
// public:
//     int start;
//     int end;
// };

// void count(ThreadData td)
// {
//     for(int i = td.start; i < td.end; i++)
//     {
//         std::cout << "i == " << i << std::endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     ThreadData td;
//     td.start = 10;
//     td.end = 20;

//     ThreadModule::Thread<ThreadData> t(count, td);

//     t.Start();
//     t.Join();

//     return 0;
// }

#define NUM 10

using thread_ptr = std::shared_ptr<ThreadModule::Thread>;

int main()
{
    std::unordered_map<std::string, thread_ptr> threads;
    // 创建多线程
    for (int i = 0; i < NUM; i++)
    {
        thread_ptr t = std::make_shared<ThreadModule::Thread>([](){
            while (true)
            {
                std::cout << "Hello World" << std::endl;
                sleep(1);
            }
        });
        threads[t->Name()] = t;
    }

    for (auto &thread : threads)
    {
        thread.second->Start();
    }

    for (auto &thread : threads)
    {
        thread.second->Join();
    }

    return 0;
}